package cn.com.xy.sms.sdk.iccid;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

import android.text.TextUtils;
import cn.com.xy.sms.sdk.iccid.IccidLocationUtil;
import cn.com.xy.sms.sdk.log.LogManager;
import cn.com.xy.sms.sdk.net.NetUtil;
import cn.com.xy.sms.sdk.util.DuoquUtils;
import cn.com.xy.sms.sdk.util.StringUtils;
import cn.com.xy.sms.util.ParseManager;

/* SDK-770 huangzhiqiang 20170426 start */
public class SimCardUtil {
    public static final int FIRST_SIM_INDEX = 0;
    public static final int SECOND_SIM_INDEX = 1;

    /**
     * 检查是否需要更新iccid信息
     * 
     * @return
     */
    public static boolean needUpdateIccidInfo() {
        HashMap<String, String[]> iccidAreaCodeMap = IccidLocationUtil.getIccidAreaCodeMap();
        if (iccidAreaCodeMap.isEmpty() || !NetUtil.isEnhance() || !NetUtil.checkAccessNetWork(2)) {
            return false;
        }

        Set<Entry<String, String[]>> setEntery = iccidAreaCodeMap.entrySet();
        for (Entry<String, String[]> entry : setEntery) {
            if (StringUtils.isNull(IccidLocationUtil.getIccidAreaCodeMapValueByIndex(entry.getKey(), 0))
                    && StringUtils.isNull(IccidLocationUtil.getIccidAreaCodeMapValueByIndex(entry.getKey(), 3))) {
                // 没有外网接口获取到的区域编码并且没有用户设置的区域编码则代表需要更新iccid信息
                return true;
            }
        }
        return false;
    }

    /**
     * 检查是否更换了SIM卡
     * 
     * @return
     */
    public static boolean isChangeSimCard() {
        try {
            IccidLocationUtil.changeIccidAreaCode(false);

            String iccid1 = DuoquUtils.getSdkDoAction().getIccidBySimIndex(FIRST_SIM_INDEX);
            String iccid2 = DuoquUtils.getSdkDoAction().getIccidBySimIndex(SECOND_SIM_INDEX);
            int simCardCount = 0;
            if (!StringUtils.isNull(iccid1)) {
                simCardCount++;
            }
            if (!StringUtils.isNull(iccid2)) {
                simCardCount++;
            }
            if (simCardCount != IccidLocationUtil.getIccidAreaCodeMap().size()) {
                // ICCID数据缓存与SIM卡数量不一致代表已更换了SIM卡
                return true;
            }
            if (!StringUtils.isNull(iccid1) && !hasIccidInfoInCache(iccid1)) {
                // SIM卡1的ICCID数据不在ICCID数据缓存中代表已更换了SIM卡
                return true;
            }
            if (!StringUtils.isNull(iccid2) && !hasIccidInfoInCache(iccid2)) {
                // SIM卡2的ICCID数据不在ICCID数据缓存中代表已更换了SIM卡
                return true;
            }
        } catch (Throwable e) {
            LogManager.e("SimCardUtil", "isChangeSimCard error", e);
        }
        return false;
    }

    /**
     * 判断指定iccid是否在iccid信息缓存中
     * 
     * @param compareIccid
     * @return
     */
    public static boolean hasIccidInfoInCache(String compareIccid) {
        HashMap<String, String[]> iccidAreaCodeMap = IccidLocationUtil.getIccidAreaCodeMap();
        if (iccidAreaCodeMap.isEmpty()) {
            return false;
        }
        Set<Entry<String, String[]>> setEntery = iccidAreaCodeMap.entrySet();
        for (Entry<String, String[]> entry : setEntery) {
            String iccid = entry.getKey();
            if (iccid.equals(compareIccid)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 根据运营商获取SIM卡卡位
     * 
     * @param numOprator 调用ParseManager.getOperatorNumByPubNum(String pubNum)方法获取号码对应的运营商
     * @param defaultIndex 默认卡位
     * @return
     */
    public static int getSimIndexByOperator(int numOprator, int defaultIndex) {
        HashMap<String, String[]> iccidAreaCodeMap = IccidLocationUtil.getIccidAreaCodeMap();
        if (iccidAreaCodeMap.isEmpty()) {
            return defaultIndex;
        }
        Set<Entry<String, String[]>> setEntry = iccidAreaCodeMap.entrySet();
        for (Entry<String, String[]> entry : setEntry) {
            String[] tempArr = entry.getValue();
            if (numOprator == Integer.parseInt(tempArr[2])) {
                return getCurrentSimIndex(entry.getKey());
            }
        }
        return defaultIndex;
    }

    /**
     * 根据iccid获取对应SIM卡卡位
     * 
     * @param iccid
     * @return
     */
    public static int getCurrentSimIndex(String iccid) {
        String secondIccid = DuoquUtils.getSdkDoAction().getIccidBySimIndex(SECOND_SIM_INDEX);
        if (!TextUtils.isEmpty(secondIccid) && secondIccid.equals(iccid)) {
            return SECOND_SIM_INDEX;
        }
        return FIRST_SIM_INDEX;
    }

    /**
     * 加载SIM卡归属地
     */
    public static void loadLocation() {
        try {
            HashMap<String, String[]> iccidAreaCodeMap = IccidLocationUtil.getIccidAreaCodeMap();
            if (iccidAreaCodeMap.isEmpty()) {
                return;
            }
            Set<Entry<String, String[]>> setEntery = iccidAreaCodeMap.entrySet();
            for (Entry<String, String[]> entry : setEntery) {
                ParseManager.loadLocation(entry.getKey(), -1, null, false);
            }
        } catch (Throwable e) {
            LogManager.e("SimCardUtil", "loadLocation error", e);
        }
    }
}
/* SDK-770 huangzhiqiang 20170426 end */